#include "dupla.h"
#include <iostream>
#include <cassert>

#define RUNTEST(t,d) { cerr << endl << "Corriendo test " << #t << ": " << #d << endl; t(); cerr << "Terminado test " << #t << " OK!" << endl << endl; }
using namespace std;

void test1(){
	Dupla<int, string> d(0,"TEST");
	assert(d.fila==0);
	assert(d.columna=="TEST");
}

void test2(){
	const int p = 3;
	int q = 4;
	Dupla< int, int> e(q,p);
	assert(e.fila == q);
	assert(e.columna == p);
	q=8;
	assert(e.fila != q);
}

void test3(){
	Dupla < int, int > d(3,6);
	Dupla < Dupla<int, int> , bool > dd(d,false);
	assert(dd.fila==d);
	assert(dd.fila.fila==3);
	d.fila=45;
	assert(dd.fila != d);
	assert(dd.fila.columna == d.columna);
	assert(d.fila == 45);
	
}

void test4(){
	Dupla < int, int > *d = new Dupla < int, int >(3,6);
	Dupla < int, int > e(*d);
	delete d;
}

int main() {
	RUNTEST(test1, Chequea el constructor);
	RUNTEST(test2, Chequea que los elementos se copian y no quedan por referencia);
	RUNTEST(test3, Dupla de Dupla);
	RUNTEST(test4, copa de dupla)
	return 0;
	
}
